Message Selector অ্যাপাচি অ্যাকটিভএমকিউ (Apache ActiveMQ) এর একটি শক্তিশালী বৈশিষ্ট্য, যা মেসেজ কনজিউমারদের মেসেজ ফিল্টার করার সক্ষমতা প্রদান করে। এটি একটি SQL-like query ব্যবহার করে কনজিউমারকে নির্দিষ্ট ধরনের মেসেজ গ্রহণ করতে অনুমতি দেয়। মেসেজ সিলেক্টর ব্যবহার করার মাধ্যমে, আপনি নির্দিষ্ট প্রপার্টির ভিত্তিতে মেসেজগুলো নির্বাচন করতে পারেন, যাতে শুধুমাত্র প্রয়োজনীয় মেসেজগুলোই কনজিউমার গ্রহণ করে এবং অন্য মেসেজগুলো ফিল্টার হয়ে যায়।
Message Selector এর মূল ধারণা
Message Selector হল একটি কনফিগারেবল ফিল্টার যা JMS (Java Message Service) স্পেসিফিকেশনের মধ্যে অন্তর্ভুক্ত। এটি একটি boolean expression বা filter এর মতো কাজ করে, যা মেসেজ প্রপার্টির উপর ভিত্তি করে মেসেজকে নির্বাচন বা অস্বীকার করে।
Message Selector এর কাজের পদ্ধতি
যখন একটি কনজিউমার একটি কিউ বা টপিক থেকে মেসেজ গ্রহণ করতে চায়, সে একটি সিলেক্টর প্যারামিটার যোগ করতে পারে। এটি কনজিউমারকে কেবল সেই মেসেজগুলো গ্রহণ করতে দেয় যেগুলোর প্রপার্টি তার নির্ধারিত শর্তের সঙ্গে মিলে।
উদাহরণ:
যদি একটি order কিউ থাকে, যেখানে বিভিন্ন প্রকারের অর্ডার মেসেজ জমা হয় (যেমন, পেমেন্ট অর্ডার, প্রোডাক্ট অর্ডার ইত্যাদি), তাহলে কনজিউমার এমন সিলেক্টর ব্যবহার করতে পারে যাতে শুধুমাত্র প্রোডাক্ট অর্ডারগুলোই গ্রহণ করা হয়।
Message Selector এর Syntax
Message Selector হল একটি SQL-like স্ট্রিং এক্সপ্রেশন, যা WHERE ক্লজের মতো কাজ করে। উদাহরণস্বরূপ, আপনি মেসেজের property এর মান অনুসারে একটি মেসেজ নির্বাচন করতে পারেন।
উদাহরণ:
property_name = 'value': এটি কেবল মেসেজগুলো গ্রহণ করবে যেগুলোর নির্দিষ্ট প্রপার্টিproperty_nameএর মান'value'।property_name > value: এটি কেবল মেসেজগুলো গ্রহণ করবে যেগুলোর নির্দিষ্ট প্রপার্টিproperty_nameএর মানvalueএর চেয়ে বড়।property_name IN (value1, value2): এটি কেবল মেসেজগুলো গ্রহণ করবে যেগুলোর নির্দিষ্ট প্রপার্টিproperty_nameএর মানvalue1বাvalue2এর মধ্যে রয়েছে।
Message Selector এর ব্যবহার
ধরা যাক, একটি টপিক বা কিউতে অর্ডার সংক্রান্ত মেসেজ আসছে, এবং আপনি শুধুমাত্র priority প্রপার্টি ৫ বা তার বেশি এমন মেসেজ নিতে চান। এর জন্য আপনি একটি সিলেক্টর ব্যবহার করতে পারেন।
Example: Message Selector in Java
import javax.jms.*;
public class MessageSelectorExample {
public static void main(String[] args) throws JMSException {
// ActiveMQ কনফিগারেশন
ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");
Connection connection = connectionFactory.createConnection();
connection.start();
// সেশন তৈরি করা
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// ডেস্টিনেশন তৈরি করা (Queue or Topic)
Destination destination = session.createQueue("OrdersQueue");
// মেসেজ কনজিউমার তৈরি, যেখানে সিলেক্টর যুক্ত করা হয়েছে
String messageSelector = "priority > 5"; // মেসেজ সিলেক্টর
MessageConsumer consumer = session.createConsumer(destination, messageSelector);
// মেসেজ গ্রহণ করা
Message message = consumer.receive();
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
System.out.println("Received Message: " + textMessage.getText());
}
// সংযোগ বন্ধ করা
consumer.close();
session.close();
connection.close();
}
}
এখানে:
String messageSelector = "priority > 5";: এটি একটি সিলেক্টর শর্ত, যা কেবলমাত্র সেই মেসেজ গ্রহণ করবে যেগুলোরpriorityপ্রপার্টির মান ৫ এর বেশি।createConsumer(destination, messageSelector): এটি কনজিউমার তৈরি করবে এবং শুধুমাত্র সেই মেসেজগুলো গ্রহণ করবে যেগুলি সিলেক্টরের শর্ত পূর্ণ করবে।
Message Selector এর সুবিধা
- ফিল্টারিং:
- মেসেজ সিলেক্টর ব্যবহার করে, কনজিউমারদের নির্দিষ্ট প্রপার্টি অনুযায়ী মেসেজ ফিল্টার করতে দেওয়া হয়, যা অপ্রয়োজনীয় মেসেজ গ্রহণ এড়াতে সাহায্য করে।
- প্রপার্টি ভিত্তিক সিলেকশন:
- এটি মেসেজের প্রপার্টি (যেমন
priority,status,order_type) এর ভিত্তিতে মেসেজ নির্বাচন করতে সহায়ক।
- এটি মেসেজের প্রপার্টি (যেমন
- স্কেলেবিলিটি:
- যখন একাধিক সাবস্ক্রাইবার থাকে, তখন মেসেজ সিলেক্টর ব্যবহারে একটি মেসেজ একাধিক সাবস্ক্রাইবারের কাছে পাঠানো হতে পারে, কিন্তু কেবলমাত্র নির্দিষ্ট শর্ত পূর্ণ করার মাধ্যমে কনজিউমার মেসেজটি গ্রহণ করবে।
- পারফরম্যান্স বৃদ্ধি:
- সঠিকভাবে সিলেক্টরের মাধ্যমে, কনজিউমার শুধুমাত্র প্রয়োজনীয় মেসেজই গ্রহণ করে, যার ফলে সিস্টেমের পারফরম্যান্স বৃদ্ধি পায়।
কিছু সাধারণ ব্যবহার ক্ষেত্র
- অর্ডার সিস্টেম:
- শুধুমাত্র
priority > 5এমন অর্ডার মেসেজ গ্রহণ করা। status = 'pending'মেসেজ গ্রহণ করে কেবল পেনডিং অর্ডার প্রক্রিয়া করা।
- শুধুমাত্র
- ইভেন্ট প্রসেসিং:
eventType = 'payment'সিলেক্টর ব্যবহার করে কেবল পেমেন্ট সম্পর্কিত ইভেন্ট মেসেজ গ্রহণ করা।
- সেন্সর ডাটা:
temperature > 100এর মাধ্যমে কেবলমাত্র উচ্চ তাপমাত্রার সেন্সর ডাটা গ্রহণ করা।
সারাংশ
Message Selector অ্যাপাচি অ্যাকটিভএমকিউ-তে একটি অত্যন্ত শক্তিশালী ফিচার, যা কনজিউমারদের মেসেজ নির্বাচন করার জন্য SQL-like কুয়েরি ব্যবহার করতে সাহায্য করে। এর মাধ্যমে কনজিউমাররা নির্দিষ্ট প্রপার্টির ভিত্তিতে মেসেজ ফিল্টার করতে পারে, যেমন priority, status, বা অন্যান্য কাস্টম প্রপার্টি। এটি পারফরম্যান্স উন্নত করতে এবং সিস্টেমে নির্দিষ্ট মেসেজ ডেলিভারি নিশ্চিত করতে সাহায্য করে।
Read more